package day7;


import java.util.Arrays;

public class StudentBiz {
    private Student[] students = new Student[5];

    public boolean add(Student student) {
        // 遍历数组，找到为null的位置，就可以加入新的学生了
        int i = 0;
        for (; i < students.length; i++) {
            if(students[i] == null) break;
        }
        // 当i等于数组长度，代表满了
        if(i == students.length) {
            expansion();
        }
        // 把数据放入数组的i位置
        students[i] = student;
        return true;
    }

    public void printStudents() {
        System.out.println("本班学生列表：");
        for (int i = 0; i < students.length; i++) {
            if(students[i] == null) break;
            System.out.print(students[i].name + "\t");
        }
    }

    private void expansion() {
        int oldLen = students.length;
//        Student[] newStudents = Arrays.copyOf(students, oldLen * 2);
        Student[] newStudents = new Student[oldLen * 2];
        // 源数组（被拷贝方），要拷贝源数组的起始位置，目标数组，放置数据到目标数组的起始位置，放源数组的多少个数据
        System.arraycopy(students, 0,newStudents, 0, students.length);
        // 把新数组的地址值赋给students
        students = newStudents;
        System.out.println("已完成扩容，当前大小为：" + students.length);
    }

    public Student search(int pos1, int pos2, String name) {
        for(int i = pos1 - 1; i < pos2; i++) {
            // 如果i在不合法的位置，返回false找不到
            if(i < 0 || i >= students.length) return null;
            if(name.equals(students[i].name)) {
                return students[i];
            } // 不能else返回null，不能说第一个不匹配就说找不到
        }
        // 要全部找完了，才能返回null说找不到
        return null;
    }
    public boolean replace(String oldName, String newName) {
        // 搜索要替换的对象
        Student student = this.search(1, students.length, oldName);
        // 引用传递，所以这里修改了，那么数组中指向该位置的，在打印的时候也是改了的
        if(student != null) {
            student.name = newName;
            return true;
        }
        return false;
    }

}
